package sessions.requestFriendshipSession;

import java.util.ArrayList;
import java.util.Date;

import javax.ejb.Remote;

import entities.FriendshipRequest;

@Remote
public interface FriendshipRequestSessionRemote {

	/**
	 * inserisce una richiesta di amicizia nel database
	 * 
	 * @param idSender
	 *            : utente che invia la richiesta
	 * @param idReceiver
	 *            : utente che riceve la richiesta
	 * @param direct
	 *            : se e' true la richiesta e' diretta
	 * @param date
	 *            : data odierna           
	 * @return l'id della richiesta
	 */
	public int insertFriendshipRequest(int idSender, int idReceiver,
			Date date, boolean direct, boolean autoSent);

	/**
	 * restituisce la richiesta cercata
	 * 
	 * @param ID
	 *            : id della richiesta
	 * @return
	 */
	public FriendshipRequest getFriendshipRequest(int ID);

	/**
	 * restituisce tutte le richieste di amicizia inviate da un utente
	 * 
	 * @param idUser
	 *            : l'utente che ha inviato le richieste
	 * @param direct: amicizia inviata da utente se vero, se falso amicizia suggerita
	 * @param autoSent: richietsa inviata da sistema se vero
	 * @return
	 */
	public ArrayList<FriendshipRequest> SentRequests(int idUser, boolean direct, boolean autoSent);

	/**
	 * restituisce tutte le richieste di amicizia ricevute da un utente
	 * 
	 * @param idUser
	 *            : l'utente che ha ricevuto le richieste
	 * @param direct: amicizia inviata da utente se vero, se falso amicizia suggerita
	 * @param autoSent: richietsa inviata da sistema se vero
	 * @return
	 */
	public ArrayList<FriendshipRequest> ReceveidRequests(int idUser,
			boolean direct, boolean autoSent);

	/**
	 * controlla se un utente ha gia' effettuato una richiesta di amicizia verso
	 * un altro utente
	 * 
	 * @param idUser1
	 *            : id del primo utente
	 * @param idUser2
	 *            : id del secondo utente
	 * @return
	 */
	public boolean checkRequestFriendships(int idUser1, int idUser2);
	
	/**
	 * accetta una richiesta di amicizia
	 * 
	 * @param idRequest
	 *            l'id della richiesta da accettare
	 */
	public int acceptRequest(int idRequest);
	
	/**
	 * rifiuta una richiesta di amicizia
	 * 
	 * @param idRequest
	 *            l'id della richiesta da rifiutare
	 */
	public boolean rejectRequest(int idRequest);
	
	/**
	 * controlla se c'e' un suggerimento di amicizia verso
	 * un altro utente
	 * 
	 * @param idUser1
	 *            : id del primo utente
	 * @param idUser2
	 *            : id del secondo utente
	 * @return
	 */
	public boolean checkIndirectRequestFriendships(int idUser1, int idUser2);
	
	// elimina tutte le richieste di amicizia di un utente
		public boolean eraseUserRequest(int userId);
	
}
